{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ICESat-2 Hackweek 2020: Machine Learning"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Yara Mohajerani ([ymohajer@uci.edu](mailto:ymohajer@uci.edu))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Note** Before going through this tutorial, make sure you have the correction environment by running\n",
    "\n",
    "`conda create --name <env> --file mlenv.lock`\n",
    "with the `mlenv.lock` file being in this repositoriy, and choose the this environment for your kernel.\n",
    "\n",
    "---\n",
    "\n",
    "In this tutorial we will explore the basics of machine learning with an emphasize on neural networks and applications in altimetry. First we will offer a brief introduction to theory and techniques in implementing neural networks, and then will focus on altimetry applications.\n",
    "\n",
    "## Motivation\n",
    "Advances in machine learning have made it a valuable tool for extracting insights from large datasets without the need for developing exact analytical algorithms. In particular, this has proven extremely useful for altimetry applications. For example, imagine you have thousands of satellite images and you want to identify paricular features automatically in the dataset. One way is to manually go through the data, which is not practical. The second way is to come up with an analytical algorithm that uses explicit engineered laws to detect the desired features. This is not very easy or robust, to say the least. But machine learning methods can learn to perform the desired task from the data in an approximate manner. Specifically, *supervised* methods use the data along with the desired outputs to accomplish the learning task. Here we will focus on supervised machine learning. An extremely useful subset of supervised machine learning fields is *neural networks*, which will be discussed in this notebook.\n",
    "\n",
    "Given the shear volume of altimetry data from ICESat-2, the is huge potential in extracting insights from the data with machine learning that were not possible before. Keep in mind that machine learning is a big field and here we focus on only a few specific approaches and a few computational tools. Specifically, we will focus on neural networks largely implemented in `keras`.\n",
    "\n",
    "---\n",
    "Introduction to neural networks\n",
    "---\n",
    "\n",
    "Neural networks use a series of nonlinear transformations with adjustable (trainable) parameters to approximate an input field into a desired output.\n",
    "\n",
    "Each 'cell' or unit of a network has an associated weight $w$ and bias $b$, and an activation function $f(z)$ for applying a nonlinear transformation such that the output is\n",
    "\n",
    "$$\n",
    "\\begin{aligned}\n",
    " f(w.x + b)\n",
    "\\end{aligned}\n",
    "$$\n",
    "\n",
    "for input $x$.\n",
    "\n",
    "Some examples of activation functions are \n",
    "Sigmoid:\n",
    "\n",
    "$$\n",
    "\\begin{aligned}\n",
    " f(z) = \\frac{1}{1+e^{-z}}\n",
    "\\end{aligned}\n",
    "$$\n",
    "\n",
    "Rectified Linear Unit (ReLU):\n",
    "\n",
    "$$\n",
    "\\begin{aligned}\n",
    " f(z) = \\max(0,z)\n",
    "\\end{aligned}\n",
    "$$\n",
    "\n",
    "And many others, which is beyond the scope of this brief tutorial. There are many excellent resources on the choice activation functions (e.g. [Neural Networks and Deep Learning by Michael Nielson](http://neuralnetworksanddeeplearning.com/chap3.html))\n",
    "\n",
    "\n",
    "A neural network contains many layers of nodes to accomplish more involved transformations. Note that each unit only has one adjustable bias $b$, but each precedening connected note has a weight $w$ associated with it. All the weighted inputs are summed such that the output is\n",
    "\n",
    "$$\n",
    "\\begin{aligned}\n",
    " f(b+\\sum_{i} w_ix_i)\n",
    "\\end{aligned}\n",
    "$$\n",
    "\n",
    "\n",
    "![Neural network generic example fromw ww.astroml.org](https://www.astroml.org/_images/fig_neural_network_1.png)\n",
    "<sub>Schematic from [AstroML](https://www.astroml.org/book_figures/chapter9/fig_neural_network.html#book-fig-chapter9-fig-neural-network)\n",
    "    \n",
    "    Figure produced by code under BSD license authored by Jake VanderPlas & Brigitta Sipocz.\n",
    "    The figure produced by this code is published in the textbook \"Statistics, Data Mining, and Machine Learning in Astronomy\" (2019)\n",
    "    For more information, see http://astroML.github.com\n",
    "</sub>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Packages like PyTorch and TensforFlow provide the tools to contruct neural networks in Python. However, here we focus on Keras, a higher-level package which makes it easier to contruct a network.\n",
    "\n",
    "Here as an example we will contruct a simple model for the quintessential machine learning example of identifying handwritten digits (MNIST dataset)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 1) Get data and develop neural network"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    }
   ],
   "source": [
    "#--  import required packages\n",
    "import keras\n",
    "import numpy as np\n",
    "from keras.datasets import mnist\n",
    "from keras.layers import Dense, Activation\n",
    "from keras.utils import plot_model\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "#-- Get built-in MNIST data from keras\n",
    "#-- \"Dataset of 60,000 28x28 grayscale images of the 10 digits, along with a test set of 10,000 images.\"\"\n",
    "#-- https://keras.io/datasets/#mnist-database-of-handwritten-digits\n",
    "(x_train, y_train), (x_test, y_test) = mnist.load_data()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1152x360 with 20 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(1, 20, figsize=(16,5))\n",
    "for i in range(20):\n",
    "    ax[i].imshow(x_train[i],cmap='binary')\n",
    "    ax[i].set_title(y_train[i])\n",
    "    ax[i].axis('off')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "#-- Turn the trainign labels (indicating which number each image is), into one-hot encoding\n",
    "#-- e.g. 3 --> [0,0,0,1,0,0,0,0,0,0]\n",
    "onehot_train = keras.utils.to_categorical(y_train, num_classes=10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "#-- Make sequential model\n",
    "model = keras.Sequential()\n",
    "#-- \"Dense implements the operation: output = activation(dot(input, kernel) + bias)\"\n",
    "#-- https://keras.io/layers/core/\n",
    "#-- first hidden layer has 64 units, and input is 28*28 which is the flattened input data\n",
    "model.add(Dense(64, activation='relu', input_dim=x_train.shape[1]*x_train.shape[2]))\n",
    "model.add(Dense(32, activation='relu', input_dim=32))\n",
    "model.add(Dense(10, activation='softmax'))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This is categorical classification with 10 classes (0-9), hence 10 units in the last layer. We compile the model with a `categorical_crossentropy` loss function used to train the model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "model.compile(optimizer='adam',     # optimization algorithm used (other examples include scholastic gradient descent, etc)\n",
    "              loss='categorical_crossentropy',\n",
    "              metrics=['accuracy']) # quantity to be minimized"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/5\n",
      "60000/60000 [==============================] - 17s 291us/step - loss: 1.4617 - accuracy: 0.6345\n",
      "Epoch 2/5\n",
      "60000/60000 [==============================] - 17s 285us/step - loss: 0.4260 - accuracy: 0.8841\n",
      "Epoch 3/5\n",
      "60000/60000 [==============================] - 18s 300us/step - loss: 0.2735 - accuracy: 0.9265\n",
      "Epoch 4/5\n",
      "60000/60000 [==============================] - 17s 290us/step - loss: 0.1956 - accuracy: 0.9457\n",
      "Epoch 5/5\n",
      "60000/60000 [==============================] - 18s 302us/step - loss: 0.1613 - accuracy: 0.9556\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<keras.callbacks.callbacks.History at 0x7f63743d6cd0>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#-- Train model\n",
    "#-- We will just use 5 epochs to save time, with batch sizes of 32\n",
    "#-- batch size is number if data points used in each training iteration\n",
    "#-- epoch is total number of times the whole dataset is used.\n",
    "#-- so total number of iterations is total_size/batch_size * epochs\n",
    "model.fit(x_train.reshape(x_train.shape[0],x_train.shape[1]*x_train.shape[2]),\n",
    "          onehot_train, epochs=5, batch_size=32)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2) Evaluate model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10000/10000 [==============================] - 1s 149us/step\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[0.1948572181949392, 0.953000009059906]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#-- turn testing labels to one-hot encoded\n",
    "onehot_test = keras.utils.to_categorical(y_test, num_classes=10)\n",
    "#-- evaluate performance of model\n",
    "#-- Returns the loss value & metrics value, which in this case is accuracy\n",
    "model.evaluate(x=x_test.reshape(x_test.shape[0],x_test.shape[1]*x_test.shape[2]),\n",
    "               y=onehot_test, verbose=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The evaluation output has multiple components. The first is always the loss function, and the remaining elements are the metrics specified in the `compile` command, which in this case is just `accuracy`. We see that even with just 5 epochs we get very good accuracy."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "# Regression Exercise with Neural Networks with ATL03-like data\n",
    "---\n",
    "Before breaking into groups, we will do the set up of the problem together.\n",
    "\n",
    "The goal is to now do a regerssion problem. You will have to figure out a way to alter the architecture of the neural network to provide an output that is not a set of classifications, but a regression parameter.\n",
    "\n",
    "First we will create simulated ATL03 data by creating a noisy dataset of a series of patches with linear features and Gaussian noise."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "#-- create 2000 line segments in tiles with width 50 and add Guassian noise\n",
    "n_tiles = 2000\n",
    "w = 40\n",
    "pts = 30 # number of poits to sample\n",
    "repeat = 3 # number of times to repeat the noise addition at each coordinate\n",
    "\n",
    "# Fixing random state for reproducibility\n",
    "np.random.seed(13)\n",
    "\n",
    "#-- training data has dimensions: # of tilesm, # of points, 2 for the x,y coords of points\n",
    "x = np.empty((n_tiles,pts*repeat,2),dtype=float)\n",
    "#-- we choose a random slope and intercept in the range -4 to 4 for both, with uniform distribution\n",
    "y = np.random.uniform(-4,4,(n_tiles,2))\n",
    "\n",
    "#-- Now populate x with noisy data\n",
    "#-- to make the data more similar to ATL03, we will have multiple y values for each x value\n",
    "for i in range(n_tiles):\n",
    "    #-- create line \n",
    "    line = y[i,0] + np.arange(w)*y[i,1] + np.random.normal(loc=0,scale=5,size=w)\n",
    "    #-- randomly select `pts` number of points\n",
    "    inds = np.random.randint(0,high=w,size=pts)\n",
    "    for r in range(repeat):\n",
    "        x[i,r*pts:(r+1)*pts,0] = inds\n",
    "        # Add Gaussian noise with standard deviation 10\n",
    "        x[i,r*pts:(r+1)*pts,1] = line[inds] + np.random.normal(loc=0,scale=10,size=pts)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([], dtype=int64)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#-- Separate 10% of elements for testing\n",
    "#-- randomly extract indices for 10% of elements\n",
    "ii = np.random.randint(0,high=n_tiles,size=int(n_tiles*0.1))\n",
    "x_test = x[ii]\n",
    "y_test = y[ii]\n",
    "#-- set the rest for training by getting difference between union and intersection\n",
    "jj = np.setdiff1d(np.union1d(np.arange(n_tiles), ii), np.intersect1d(np.arange(n_tiles), ii))\n",
    "x_train = x[jj]\n",
    "y_train = y[jj]\n",
    "#-- make sure there are no overlapping elements\n",
    "np.intersect1d(ii,jj)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1152x288 with 4 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#-- Plot some example tiles\n",
    "fig,ax = plt.subplots(1, 4,figsize=(16,4))\n",
    "#-- loop over to plot the first 4 tiles\n",
    "for i in range(4):\n",
    "    ax[i].plot(x[i,:,0],x[i,:,1],'bo')\n",
    "    ax[i].plot(np.arange(w),y[i,0] + np.arange(w)*y[i,1],'r-')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Breakout (15 minutes)\n",
    "Try to create a neural network that learn from the examples above and get the slope and coefficient for a given linear feature."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "\n",
    "---\n",
    "### Solution:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential_2\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense_4 (Dense)              (None, 128)               23168     \n",
      "_________________________________________________________________\n",
      "dense_5 (Dense)              (None, 256)               33024     \n",
      "_________________________________________________________________\n",
      "dense_6 (Dense)              (None, 256)               65792     \n",
      "_________________________________________________________________\n",
      "dense_7 (Dense)              (None, 2)                 514       \n",
      "=================================================================\n",
      "Total params: 122,498\n",
      "Trainable params: 122,498\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model2 = keras.Sequential()\n",
    "\n",
    "model2.add(Dense(128, activation='relu', input_dim=x.shape[1]*x.shape[2]))\n",
    "model2.add(Dense(256, activation='relu'))\n",
    "model2.add(Dense(256, activation='relu'))\n",
    "#-- for final model we use a simple linear activation, which simply returns the input unmodified\n",
    "model2.add(Dense(2, activation='linear'))\n",
    "\n",
    "#-- we use a mean absolute error as the loss function\n",
    "model2.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])\n",
    "model2.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As a side note, in addition to summarizing the model as above, we can also plot it. This is particularly useful as models get larger and more complex with less linear architectures such as skip-connections, parallel layers, etc. that are outside of the scope of this tutorial."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot_model(model2,show_shapes=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/40\n",
      "1814/1814 [==============================] - 2s 860us/step - loss: 43.3455 - accuracy: 0.5518\n",
      "Epoch 2/40\n",
      "1814/1814 [==============================] - 1s 545us/step - loss: 6.0829 - accuracy: 0.6273\n",
      "Epoch 3/40\n",
      "1814/1814 [==============================] - 1s 506us/step - loss: 3.9657 - accuracy: 0.6852\n",
      "Epoch 4/40\n",
      "1814/1814 [==============================] - 1s 543us/step - loss: 3.0784 - accuracy: 0.7062\n",
      "Epoch 5/40\n",
      "1814/1814 [==============================] - 1s 493us/step - loss: 2.4763 - accuracy: 0.7398\n",
      "Epoch 6/40\n",
      "1814/1814 [==============================] - 1s 535us/step - loss: 2.0041 - accuracy: 0.7619\n",
      "Epoch 7/40\n",
      "1814/1814 [==============================] - 1s 621us/step - loss: 1.7350 - accuracy: 0.7712\n",
      "Epoch 8/40\n",
      "1814/1814 [==============================] - 1s 445us/step - loss: 1.4093 - accuracy: 0.7988\n",
      "Epoch 9/40\n",
      "1814/1814 [==============================] - 1s 407us/step - loss: 1.3779 - accuracy: 0.8264\n",
      "Epoch 10/40\n",
      "1814/1814 [==============================] - 1s 533us/step - loss: 1.3328 - accuracy: 0.8258\n",
      "Epoch 11/40\n",
      "1814/1814 [==============================] - 1s 561us/step - loss: 1.1375 - accuracy: 0.8490\n",
      "Epoch 12/40\n",
      "1814/1814 [==============================] - 1s 540us/step - loss: 0.9740 - accuracy: 0.8583\n",
      "Epoch 13/40\n",
      "1814/1814 [==============================] - 1s 538us/step - loss: 0.9094 - accuracy: 0.8749\n",
      "Epoch 14/40\n",
      "1814/1814 [==============================] - 1s 403us/step - loss: 0.8589 - accuracy: 0.8721\n",
      "Epoch 15/40\n",
      "1814/1814 [==============================] - 1s 484us/step - loss: 0.7470 - accuracy: 0.8804\n",
      "Epoch 16/40\n",
      "1814/1814 [==============================] - 1s 431us/step - loss: 0.6748 - accuracy: 0.8969\n",
      "Epoch 17/40\n",
      "1814/1814 [==============================] - 1s 565us/step - loss: 0.6382 - accuracy: 0.8853\n",
      "Epoch 18/40\n",
      "1814/1814 [==============================] - 1s 541us/step - loss: 0.7518 - accuracy: 0.8903\n",
      "Epoch 19/40\n",
      "1814/1814 [==============================] - 1s 504us/step - loss: 0.6969 - accuracy: 0.8914\n",
      "Epoch 20/40\n",
      "1814/1814 [==============================] - 1s 496us/step - loss: 0.6818 - accuracy: 0.8964\n",
      "Epoch 21/40\n",
      "1814/1814 [==============================] - 1s 491us/step - loss: 0.6172 - accuracy: 0.9057\n",
      "Epoch 22/40\n",
      "1814/1814 [==============================] - 1s 593us/step - loss: 0.6536 - accuracy: 0.8947\n",
      "Epoch 23/40\n",
      "1814/1814 [==============================] - 1s 558us/step - loss: 0.5987 - accuracy: 0.9063\n",
      "Epoch 24/40\n",
      "1814/1814 [==============================] - 1s 546us/step - loss: 0.6847 - accuracy: 0.9024\n",
      "Epoch 25/40\n",
      "1814/1814 [==============================] - 1s 501us/step - loss: 0.8876 - accuracy: 0.8837\n",
      "Epoch 26/40\n",
      "1814/1814 [==============================] - 1s 426us/step - loss: 0.9041 - accuracy: 0.8908\n",
      "Epoch 27/40\n",
      "1814/1814 [==============================] - 1s 440us/step - loss: 0.7077 - accuracy: 0.9002\n",
      "Epoch 28/40\n",
      "1814/1814 [==============================] - 1s 546us/step - loss: 0.7816 - accuracy: 0.8947\n",
      "Epoch 29/40\n",
      "1814/1814 [==============================] - 1s 460us/step - loss: 0.6893 - accuracy: 0.8953\n",
      "Epoch 30/40\n",
      "1814/1814 [==============================] - 1s 435us/step - loss: 0.6117 - accuracy: 0.8975\n",
      "Epoch 31/40\n",
      "1814/1814 [==============================] - 1s 555us/step - loss: 0.6049 - accuracy: 0.8991\n",
      "Epoch 32/40\n",
      "1814/1814 [==============================] - 1s 475us/step - loss: 0.5017 - accuracy: 0.9085\n",
      "Epoch 33/40\n",
      "1814/1814 [==============================] - 1s 446us/step - loss: 0.5119 - accuracy: 0.9118\n",
      "Epoch 34/40\n",
      "1814/1814 [==============================] - 1s 488us/step - loss: 0.3947 - accuracy: 0.9206\n",
      "Epoch 35/40\n",
      "1814/1814 [==============================] - 1s 455us/step - loss: 0.3477 - accuracy: 0.9250\n",
      "Epoch 36/40\n",
      "1814/1814 [==============================] - 1s 437us/step - loss: 0.2875 - accuracy: 0.9250\n",
      "Epoch 37/40\n",
      "1814/1814 [==============================] - 1s 492us/step - loss: 0.3185 - accuracy: 0.9372\n",
      "Epoch 38/40\n",
      "1814/1814 [==============================] - 1s 437us/step - loss: 0.3662 - accuracy: 0.9206\n",
      "Epoch 39/40\n",
      "1814/1814 [==============================] - 1s 442us/step - loss: 0.4482 - accuracy: 0.9052\n",
      "Epoch 40/40\n",
      "1814/1814 [==============================] - 1s 555us/step - loss: 0.4982 - accuracy: 0.9035\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<keras.callbacks.callbacks.History at 0x7f637b9b5350>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#-- Train model\n",
    "model2.fit(x_train.reshape(x_train.shape[0],x_train.shape[1]*x_train.shape[2]),\\\n",
    "          y_train, epochs=40, batch_size=30)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "200/200 [==============================] - 0s 584us/step\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[4.342294425964355, 0.7149999737739563]"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#-- evaluate on test data\n",
    "model2.evaluate(x=x_test.reshape(x_test.shape[0],x_test.shape[1]*x_test.shape[2]), y=y_test, verbose=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1814/1814 [==============================] - 0s 176us/step\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[0.46593256509948067, 0.9250275492668152]"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#-- Also evaluate on train data\n",
    "model2.evaluate(x=x_train.reshape(x_train.shape[0],x_train.shape[1]*x_train.shape[2]), y=y_train, verbose=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We see that the network is able to recover the regression coefficients with high accuracy for the train data and reasonable accuracy for the test data."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:mlenv]",
   "language": "python",
   "name": "conda-env-mlenv-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
